home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include "c.h"
- #include "expr.h"
- #include "gen.h"
- #include "cglbdec.h"
-
- /*
- * 68000 C compiler
- *
- * Copyright 1984, 1985, 1986 Matthew Brandt.
- * all commercial rights reserved.
- *
- * This compiler is intended as an instructive tool for personal use. Any
- * use for profit without the written consent of the author is prohibited.
- *
- * This compiler may be distributed freely for non-commercial use as long
- * as this notice stays intact. Please forward any enhancements or questions
- * to:
- *
- * Matthew Brandt
- * Box 920337
- * Norcross, Ga 30092
- */
-
- put_sc(scl)
- int scl;
- { switch(scl) {
- case sc_static:
- fprintf(list,"Static ");
- break;
- case sc_auto:
- fprintf(list,"Auto ");
- break;
- case sc_global:
- fprintf(list,"Global ");
- break;
- case sc_external:
- fprintf(list,"External ");
- break;
- case sc_type:
- fprintf(list,"Type ");
- break;
- case sc_const:
- fprintf(list,"Constant ");
- break;
- case sc_member:
- fprintf(list,"Member ");
- break;
- case sc_label:
- fprintf(list,"Label");
- break;
- case sc_ulabel:
- fprintf(list,"Undefined label");
- break;
- }
- }
-
- put_ty(tp)
- TYP *tp;
- { if(tp == 0)
- return;
- switch(tp->type) {
- case bt_char:
- fprintf(list,"Char");
- break;
- case bt_short:
- fprintf(list,"Short");
- break;
- case bt_enum:
- fprintf(list,"enum ");
- goto ucont;
- case bt_long:
- fprintf(list,"Long");
- break;
- case bt_unsigned:
- fprintf(list,"unsigned long");
- break;
- case bt_float:
- fprintf(list,"Float");
- break;
- case bt_double:
- fprintf(list,"Double");
- break;
- case bt_pointer:
- if( tp->val_flag == 0)
- fprintf(list,"Pointer to ");
- else
- fprintf(list,"Array of ");
- put_ty(tp->btp);
- break;
- case bt_union:
- fprintf(list,"union ");
- goto ucont;
- case bt_struct:
- fprintf(list,"struct ");
- ucont: if(tp->sname == 0)
- fprintf(list,"<no name> ");
- else
- fprintf(list,"%s ",tp->sname);
- break;
- case bt_ifunc:
- case bt_func:
- fprintf(list,"Function returning ");
- put_ty(tp->btp);
- break;
- }
- }
-
- list_var(sp,i)
- SYM *sp;
- int i;
- { int j;
- for(j = i; j; --j)
- fprintf(list," ");
- fprintf(list,"%-10s =%06x ",sp->name,sp->value.u);
- if( sp->storage_class == sc_external)
- fprintf(output,"\tglobal\t%s\n",sp->name);
- else if( sp->storage_class == sc_global )
- fprintf(output,"\tglobal\t%s\n",sp->name);
- put_sc(sp->storage_class);
- put_ty(sp->tp);
- fprintf(list,"\n");
- if(sp->tp == 0)
- return;
- if((sp->tp->type == bt_struct || sp->tp->type == bt_union) &&
- sp->storage_class == sc_type)
- list_table(&(sp->tp->lst),i+1);
- }
-
- list_table(t,i)
- TABLE *t;
- int i;
- { SYM *sp;
- sp = t->head;
- while(sp != NULL) {
- list_var(sp,i);
- sp = sp->next;
- }
- }
-
-